package com.plugin.manage.controller;

import com.plugin.manage.common.RespObj;
import com.plugin.manage.service.IMealsService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用餐看板控制器
 *
 * @author mark
 * @date 2025-07-26
 */
@Slf4j
@RestController
@RequestMapping("/meals/dashboard")
@Tag(name = "用餐看板管理", description = "用餐统计相关接口")
public class MealsController {
    
    @Autowired
    private IMealsService mealsDashboardService;

    /**
     * 获取用餐统计信息
     * 统计今日用餐人数和昨日用餐人数以及较昨天的增长百分比
     */
    @GetMapping("/todayCount")
    @Operation(summary = "获取今日用餐人次", description = "统计今日用餐人数和昨日用餐人数以及较昨天的增长百分比")
    public RespObj<?> getMealStatistics() {
        log.info("开始查询用餐统计信息");
        
        RespObj<?> result = mealsDashboardService.getMealStatistics();
        
        log.info("用餐统计信息查询完成");
        
        return result;
    }

    /**
     * 获取今日菜谱记录
     * 查询今日所有的用餐记录，包括菜品名称、用餐时间、餐别等信息
     */
    @GetMapping("/todayMenu")
    @Operation(summary = "获取今日菜谱记录", description = "查询今日所有的用餐记录，包括菜品名称、用餐时间、餐别等信息")
    public RespObj<?> getTodayMenuRecords() {
        log.info("开始查询今日菜谱记录");
        
        RespObj<?> result = mealsDashboardService.getTodayMenuRecords();
        
        log.info("今日菜谱记录查询完成");
        
        return result;
    }

    /**
     * 统计最近7天就餐人次
     * 查询最近7天每日的就餐人次数据，用于趋势分析和统计展示
     */
    @GetMapping("/last7Days")
    @Operation(summary = "统计最近7天就餐人次", description = "查询最近7天每日的就餐人次数据，用于趋势分析和统计展示")
    public RespObj<?> getLast7DaysMealStatistics() {
        log.info("开始统计最近7天就餐人次");
        
        RespObj<?> result = mealsDashboardService.getLast7DaysMealStatistics();
        
        log.info("最近7天就餐人次统计完成");
        
        return result;
    }

    /**
     * 查询今日套餐
     */
    @GetMapping("/menuByMeal")
    @Operation(summary = "查询今日套餐", description = "查询指定的所有启用菜品分类")
    public RespObj<?> getTodayMenu() {
        log.info("开始根据parent_id查询今日套餐菜谱，");
        
        RespObj<?> result = mealsDashboardService.getTodayMenu();
        
        log.info("查询今日套餐菜谱完成");
        
        return result;
    }

    /**
     * 统计今日就餐方式数量（堂食、外带、送餐）
     * 根据elder_dish_record中的dinner_mode字段统计各种就餐方式的记录数
     */
    @GetMapping("/dinnerMode")
    @Operation(summary = "统计今日就餐方式数量", description = "按照堂食、外带、送餐来统计今日就餐记录数，包括数量和百分比")
    public RespObj<?> getTodayDinnerModeStatistics() {
        log.info("开始统计今日就餐方式数量");
        
        RespObj<?> result = mealsDashboardService.getTodayDinnerModeStatistics();
        
        log.info("今日就餐方式数量统计完成");
        
        return result;
    }

    /**
     * 统计今日菜品分类数量和百分比（荤菜、素菜、主食、汤品等）
     * 统计dish_ids中每个菜品ID在今天被售卖的总次数，按elder_dish_category分类计算比值
     */
    @GetMapping("/dishCategory")
    @Operation(summary = "统计今日菜品分类数量和百分比", description = "统计dish_ids中每个菜品ID在今天被售卖的总次数，按荤菜、素菜、主食、汤品等分类计算比值")
    public RespObj<?> getTodayDishCategoryStatistics() {
        log.info("开始统计今日菜品分类数量和百分比（统计菜品ID售卖次数，按分类计算比值）");
        
        RespObj<?> result = mealsDashboardService.getTodayDishCategoryStatistics();
        
        log.info("今日菜品分类统计完成");
        
        return result;
    }

    /**
     * 统计今日菜品消费份数TOP5
     * 根据elder_dish_record中的dish_ids统计每个菜品在今天的出现次数，按消费次数排序取前5名
     */
    @GetMapping("/dishTop5")
    @Operation(summary = "统计今日菜品消费份数TOP5", description = "根据dish_ids统计每个菜品在今天的出现次数，按消费次数从大到小排序取前5名")
    public RespObj<?> getTodayDishConsumptionTop5() {
        log.info("开始统计今日菜品消费份数TOP5");
        
        RespObj<?> result = mealsDashboardService.getTodayDishConsumptionTop5();
        
        log.info("今日菜品消费份数TOP5统计完成");
        
        return result;
    }

    /**
     * 统计今日套餐消费次数TOP5
     * 根据elder_dish_record中的set_id统计每个套餐在今天的出现次数，按消费次数排序取前5名
     */
    @GetMapping("/mealSetTop5")
    @Operation(summary = "统计今日套餐消费次数TOP5", description = "根据elder_dish_record中的set_id统计每个套餐在今天的出现次数，按消费次数从大到小排序取前5名")
    public RespObj<?> getTodayMealSetTop5() {
        log.info("开始统计今日套餐消费次数TOP5");
        
        RespObj<?> result = mealsDashboardService.getTodayMealSetTop5();
        
        log.info("今日套餐消费次数TOP5统计完成");
        
        return result;
    }
}
